<?php

Class formcontrol {
    //serie di controlli

             function precform(&$body,$type){ //Passaggio per riferimento
                //echo $_SERVER['SCRIPT_NAME'];
                //inizializzo i campi hidden
                $body->setContent("phpscript",$_SERVER['SCRIPT_NAME']);//inizializza l'action del form allo script in esecuzione. in questo modo posso riutilizzare il form per script diversi
                $body->setContent("op",$_POST['op']);//inizializza l'operazione da effettuare all'interno dello script
                $body->setContent("gruppo",$_POST['gruppo']);
                
                switch (basename($_SERVER['SCRIPT_NAME'])){//switch sullo script

                    case 'profilo_utente.php':
                    case 'registrazione.php':
                    case 'gestione_utenti.php':

                        switch ($type){//switch sull'operazione richiesta all'interno dello script
                            case 'registrazione'://viene eseguito in seguito alla richiesta di inserimento, oppure alla richiesta di modifca, dopo aver visualizzato il riepilogo o dopo aver visualizzato i dettagli utente.
                                if (!strcmp($_POST['sesso'],'m') || !strcmp($_POST['sesso'],'maschio')){
                                    $body->setContent("maschio_check","checked");
                                }else{
                                    $body->setContent("fem_check","checked");
                                }
                                if (isset($_POST['op'])){
                                    $operation=$_POST['op'];
                                }else{//prima chiamata al form, imposto la procedura di registrazione.
                                    $operation="registra";
                                }

                                $body->setContent("operation",$operation);//viene settata l'operazione da eseguire all'interno dello script (valore "name" del button)
                                if (!strcmp($_POST['op'],"modifica")){
                                        $h3="Modifica dati utente";
                                        $email_bck= $_POST['email'];//tengo traccia dell'email, poiché è la chiave primaria. Qualora fosse modificata si perderebbe traccia della tupla in elaborazione.
                                        $body->setContent("email_bck",$email_bck);
                                    }else{
                                        $h3="Registrazione utente";
                                    }
                                if (!strcmp($_SESSION['user']['privilegi'][0]['gruppo'],"amministratore")){
                                    $groupsel=new Template("dtml/mod_admininsmod.html");//carica il campo select per la scelta del livello di utenza all'interno del form solo se effettuata dall'amministratore
                                    $body->setContent("groupsel",$groupsel->get());
                                    if (!strcmp($_POST['op'],"modifica")){
                                        if (!preg_match('/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}/',$_POST['data_di_nascita'])){//Controllo necessario poiché l'amministratore oltre a visualizzare il riepilogo dei dati utente da lui inseriti può anche visualizzare i dettagli utente. Infatti in quest'ultimo caso la data è presa dal db nel formato aaaa-mm-gg.
                                            list($anno,$mese,$giorno)=explode('-',$_POST['data_di_nascita']);
                                            $_POST['data_di_nascita']=$giorno."/".$mese."/".$anno;
                                        }
                                        $advice= new Template("dtml/mod_adminmod.html");//mostra un avviso solo per l'operazione di modifica.
                                        $body->setContent("adminadvice",$advice->get());
                                    }
                                }
                                break;

                            case 'riepilogo'://viene usato anche per precompilare il template per la visualizzazione dei dettagli utente (visualizza_utenti.html).
                                global $nome_gruppo;//gestione_utenti.php,riga 54
                                $body->setContent("sesso",$_POST['sesso']);
                                $body->setContent("invia","submit");
                                if (!preg_match('/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}/',$_POST['data_di_nascita'])){//Controllo necessario poiché l'amministratore oltre a visualizzare il riepilogo dei dati utente da lui inseriti può anche visualizzare i dettagli utente. Infatti in quest'ultimo caso la data è presa dal db nel formato aaaa-mm-gg.
                                    list($anno,$mese,$giorno)=explode('-',$_POST['data_di_nascita']);
                                    $_POST['data_di_nascita']=$giorno."/".$mese."/".$anno;
                                }
                                if ($_SESSION['user']['privilegi'][0]['gruppo']=="amministratore"){                                    
                                    $utenza= new Template("dtml/mod_adminriep.html");
                                    $utenza->setContent("utenza",$nome_gruppo);
                                    $body->setContent("utenza_sel",$utenza->get());
                                    if (!strcmp($_POST['op'],"modifica")){
                                        $body->setContent("email_bck",$_POST['email_bck']);
                                    }
                                }
                                break;
                            }
                            $body->setContent("h3",$h3);
                            $body->setContent("nome",stripslashes($_POST['nome']));
                            $body->setContent("cognome",stripslashes($_POST['cognome']));
                            $body->setContent("data_di_nascita",$_POST['data_di_nascita']);
                            $body->setContent("cod_fisc",$_POST['cod_fisc']);
                            $body->setContent("rec_tel",$_POST['rec_tel']);
                            $body->setContent("indirizzo",stripslashes($_POST['indirizzo']));
                            $body->setContent("citta",stripslashes($_POST['citta']));
                            $body->setContent("cap",$_POST['cap']);
                            $body->setContent("provincia",$_POST['provincia']);
                            $body->setContent("email",$_POST['email']);
                            $body->setContent("password",$_POST['password']);
                            break;

                        case 'gestione_serverog.php':
                            if (isset($_POST['op'])){
                                $operation=$_POST['op'];
                            }else{
                                $operation="registra";
                            }
                            if ($_POST['id']!=null){
                                $body->setContent("type","hidden");
                                $body->setContent("name","op");
                                $body->setContent("id",$_POST['id']);
                            }else{                                
                                $body->setContent("type","submit");
                                $body->setContent("name","action");
                            }
                            $body->setContent("operation",$operation);
                            $body->setContent("nome",stripslashes($_POST['nome']));
                            $body->setContent("durata",$_POST['durata']);
                            $body->setContent("prezzo",$_POST['prezzo']);
                            $body->setContent("descrizione",stripslashes($_POST['descrizione']));
                            break;


                        case 'gestione_prodotti.php':


                                    if($type == 'modifica'){
                                        if($_POST['attivo'] == 1){
                                            $body->setContent("stato_attivo","checked");
                                        }

                                        $body->setContent("nome",stripslashes($_POST['nome']));
                                        $body->setContent("id",$_POST['id']);
                                        $body->setContent("prezzo",$_POST['prezzo']);
                                        $body->setContent("quantita",$_POST['quantita']);
                                        $body->setContent("descrizione",stripslashes($_POST['descrizione']));
                                    }

                                    if (isset($_POST['op'])){
                                            $operation=$_POST['op'];
                                        }else{
                                            $operation="modifica";
                                        }

                                    $marche =setcontents::getResult(
                                            "SELECT id,nome
                                               FROM marca
                                           ORDER BY nome");

                                    $categorie =setcontents::getResult(
                                            "SELECT id,nome
                                               FROM categoria
                                           ORDER BY nome");

                                    $body->setContent("select_marca",$marche);
                                    $body->setContent("select_categoria",$categorie);
                                    $body->setContent("operation",$operation);

                                    break;
                            
                            break;

                }
            }

             function field(&$body,&$message,&$style){
                switch (basename($_SERVER['SCRIPT_NAME'])){
                    case 'profilo_utente.php':
                    case 'registrazione.php':
                    case 'gestione_utenti.php';
                        $ctrl1=TRUE;
                        $ctrl2=TRUE;
                        $ctrl3=TRUE;
                        $ctrl4=TRUE;
                        $ctrl5=TRUE;
                        $ctrl6=TRUE;
                        $ctrl7=TRUE;
                        $ctrl8=TRUE;
                        $ctrl9=TRUE;
                        $ctrl10=TRUE;
                        $ctrl11=TRUE;
                         $ctrl12=TRUE;
                        if (strcmp($_POST['op'],"modifica")){//Per l'operazione di modifica lasciando vuoti alcuni campi vengono confermati i precedenti, quindi si deve skippare il controllo

                                $oid = mysql_query("SELECT nome FROM utente WHERE cod_fisc='{$_POST['cod_fisc']}'");
                                if(mysql_num_rows($oid) != 0){
                                    $message="Utente gia' registrato";
                                    $ctrl1=FALSE;
                                }

                                $oid2 = mysql_query("SELECT nome FROM utente WHERE email='{$_POST['email']}'");
                                if(mysql_num_rows($oid2) != 0){
                                    $message="Email gia' associata ad un altro utente";
                                    $ctrl3=FALSE;
                                }

                                if ($_POST['password']=="" || $_POST['password2']==""){
                                    $message="Inserire la password in entrambi i campi";
                                    $ctrl8=FALSE;
                                }

                                if ($_POST['gruppo']['id']=="0"){
                                    $message="Specificare il livello di utenza";
                                    $ctrl9=FALSE;
                                }
                                if ((strlen($_POST['password'])<6) and $_POST['password']!=""){//qualora l'amministratore modifichi la pwd viene controllato che sia della lunghezza opportuna
                                    $message="La password deve contenere almeno 6 caratteri";
                                    $ctrl11=FALSE;
                                }
                        }

                        if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $_POST['email'])){
                            $message="Formato email non valido";
                            $ctrl4=FALSE;
                        }

                        if (!preg_match('/^[1-9]{1}[0-9]{4,}/', $_POST['rec_tel']) and $_POST['rec_tel']!=""){
                            $message="Recapito telefonico non valido";
                            $ctrl4=FALSE;
                        }

                        list($giorno,$mese,$anno)=explode('/', $_POST['data_di_nascita']);

                        if (($giorno>31 and $giorno<0)||($mese>12 and $mese<0) || !preg_match('/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}/',$_POST['data_di_nascita'])){
                            $message="La data inserita non è valida";
                            $ctrl5=FALSE;
                        }

                        if ((date("Y",time())-$anno)>120){
                            $message="La data inserita non è valida";
                            $ctrl6=FALSE;
                        }

                        if ($_POST['nome']=="" || $_POST['cognome']=="" || $_POST['cod_fisc']=="" || $_POST['data_di_nascita']==""){
                            $message="La compilazione dei campi contrassegnati da * è obbligatoria";
                            $ctrl7=FALSE;

                        }

                        if (!preg_match('/^[a-z]{6}[0-9]{2}[a-z]{1}[0-9]{2}[a-z]{1}[0-9]{3}[a-z]{1}$/i', $_POST['cod_fisc'])) {
                           $message="Formato codice fiscale non valido";
                            $ctrl10=FALSE;
                        }

                        if ($_POST['password']!=$_POST['password2']){
                                    $message="Le password inserite non coincidono";
                                    $ctrl12=FALSE;
                                }

                        if ($ctrl1 and $ctrl2 and $ctrl3 and $ctrl4 and $ctrl5 and $ctrl6 and $ctrl7 and $ctrl8 and $ctrl9 and $ctrl10 and $ctrl11 and $ctrl12){
                            return TRUE;
                        }else{
                            $style="alert";
                            $body = new Template("dtml/form.html");
                            $type="registrazione";
                            formcontrol::precform($body,$type);
                            return FALSE;
                        }
                        break;

                    case 'gestione_serverog.php':

                        $ctrl1=TRUE;
                        $ctrl2=TRUE;
                        $ctrl3=TRUE;
                        $ctrl4=TRUE;

                        if ($_POST['nome']=="" || $_POST['durata']=="" || $_POST['prezzo']==""){
                            $message="La compilazione dei campi contrassegnati da * è obbligatoria";
                            $ctrl1=FALSE;
                        }

                        if (!strcmp($_POST['op'],"registra")){
                            $nome = addslashes($_POST['nome']);
                            $oid=mysql_query("SELECT * FROM servizio_erogato WHERE servizio_erogato.nome='{$nome}'");

                            if (mysql_num_rows($oid)!=0){
                                $message="Servizio già presente sul database";
                                $ctrl2=FALSE;
                            }
                        }
                        
                        if (!preg_match('/^[0-9]{1,2}/', $_POST['durata'])){
                            $message="La durata deve essere espressa in minuti nel formato \"mm\"";
                            $ctrl3=FALSE;
                        }

                        if (!preg_match('/^[0-9]{1,3}/', $_POST['prezzo'])){
                            $message="Formato prezzo non valido";
                            $ctrl4=FALSE;
                        }
                        
                        if ($ctrl1 and $ctrl2 and $ctrl3 and $ctrl4){
                            return TRUE;
                        }else{
                            $style="alert";//è passato per riferimento
                            $body = new Template("dtml/inserimento_servizio.html");
                            $type="registrazione";
                            formcontrol::precform($body,$type);
                            return FALSE;
                        }
                        break;

                    case 'gestione_prodotti.php': /* ------ Funzione per il controllo dei dati inseriti nel form di Inserimento prodotto ------ */

                        switch($_POST['tipologia']){

                            case 'marche':

                                if ($_POST['nome']==""){
                                    $message="La compilazione dei campi contrassegnati da * è obbligatoria";
                                    $style = "alert";
                                    return FALSE;
                                    }

                                if(!imagecontrol::image_control($message, $style)){
                                    return FALSE;
                                }

                                /*  Verifica dell'esistenza di una marca nel database con lo stesso nome */

                                if(strcmp($_POST['op'],"modifica")){

                                    $marca_exist = mysql_query(
                                            "SELECT *
                                               FROM marca
                                              WHERE nome = '{$_POST['nome']}'");

                                    if (!$marca_exist) {
                                        $message="Si e' riscontrato un problema nel database: ".mysql_error();
                                        $style="alert";
                                        return FALSE;
                                    }else{
                                        if(mysql_num_rows($marca_exist) != 0){
                                            $message = "Nel database è già presente una marca con questo nome";
                                            $style = "alert";
                                            return FALSE;
                                        }
                                    }
                                }
                                return TRUE;
                                break;

                            case 'categorie':

                                if ($_POST['nome']=="" || $_POST['categoria']==""){
                                    $message="La compilazione dei campi contrassegnati da * è obbligatoria";
                                    $style = "alert";
                                    return FALSE;
                                    }

                                /*  Verifica dell'esistenza di una marca nel database con lo stesso nome */
                                if(strcmp($_POST['op'],"modifica")){

                                    $categoria_exist = mysql_query(
                                                "SELECT *
                                                   FROM categoria
                                                  WHERE nome = '{$_POST['nome']}'");

                                    if (!$categoria_exist) {
                                        $message="Si e' riscontrato un problema nel database: ".mysql_error();
                                        $style="alert";
                                        return FALSE;
                                    }else{
                                        if(mysql_num_rows($categoria_exist) != 0){
                                            $message = "Nel database è già presente una categoria con questo nome";
                                            $style = "alert";
                                            return FALSE;
                                        }
                                }
                                }
                                return TRUE;
                                break;

                            default: // case prodotti

                                if ($_POST['nome']=="" || $_POST['quantita']=="" || $_POST['prezzo']=="" || $_POST['marca']=="" || $_POST['categoria']==""){
                                    $message="La compilazione dei campi contrassegnati da * è obbligatoria";
                                    $style = "alert";
                                    return FALSE;
                                    }
                                //'\b[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?\b'
                                //^([0-9]{1,3})+(\.[0-9]{2})$
                                if(!preg_match('/^(([1-9]+[0-9]*)+(,[0-9]{2})?)|(([0]{1})+(,[0]{1}[1-9]{1}))|(([0]{1})+(,[1-9]{1}[0-9]{1}))$/',$_POST['prezzo'])){// || eregi("^([0-9]{2})$", $_POST['prezzo_virgola']) == 0){
                                    $message="Il prezzo deve essere diverso da 0 ed avere il formato 123.45";
                                    $style = "alert";
                                    return FALSE;
                                }

                                if (eregi("^([0-9]{1,4})$", $_POST['quantita']) == 0){
                                    $message="Nel campo Quantità si possono inserire solo numeri interi positivi";
                                    $style = "alert";
                                    return FALSE;
                                }

                                        /* Verifica della presenza dell'associazione marca-categoria nel database
                                         * se non esiste si effettua l'inserimento
                                         */
                                if(!($_POST['attivo'] == "")){$_POST['attivo']=1;}

                                $query_control = mysql_query(
                                            "SELECT *
                                               FROM categoria_marca
                                              WHERE id_marca = '{$_POST['marca']}' and id_categ = '{$_POST['categoria']}'");

                                if (!$query_control) {
                                    $message="Si e' riscontrato un problema nel database: ".mysql_error();
                                    $style="alert";
                                    return FALSE;
                                }

                                if(mysql_num_rows($query_control) == 0){

                                    $query_insMC = mysql_query(
                                                "INSERT INTO categoria_marca
                                                      VALUES ('{$_POST['marca']}','{$_POST['categoria']}')");

                                    if (!$query_insMC) {
                                        $message="Si e' riscontrato un problema nel database: ".mysql_error();
                                        $style="alert";
                                        return FALSE;
                                    }
                                }

                                if(!imagecontrol::image_control($message, $style)){
                                    return FALSE;
                                }

                                /*  Verifica dell'esistenza di un prodotto nel database con lo stesso nome e marca */
                                if($_POST['op'] != 'modifica'){
                                    $nome = addslashes($_POST['nome']);
                                    $product_exist = mysql_query(
                                                "SELECT *
                                                   FROM prodotto
                                                  WHERE marca = '{$_POST['marca']}' and nome = '{$nome}'");

                                    if (!$product_exist) {
                                        $message="Si e' riscontrato un problema nel database: ".mysql_error();
                                        $style="alert";
                                        return FALSE;
                                    }else{
                                        if(mysql_num_rows($product_exist) != 0){
                                            $message = "Nel database è già presente un prodotto con questo nome e marca";
                                            $style = "alert";
                                            return FALSE;
                                        }
                                }
                                }

                                return TRUE;
                                break;

                            break;
                        }

                }
            }

}

?>
